export default {
  namespaced: true,
  // a   a={xxx:1}                b   xxx  b={xxx:2}
  // 添加购物车
  // 1：在vuex创建一个字段用于存储商品  
  // 2:写好mutations方法用于添加商品信息
  // 3：点击购物车调用mutations方法实现添加（有是否勾选，数量 ，包含商品其它信息）
  state: {
    // num: uni.getStorageSync('cart-num') || 0
    num: 0,
    cart: []
  },
  mutations: {
    setNum(state, value) {
      state.num = value
      // uni.setStorageSync('cart-num', value)
    },
    addToCart(state, value) {
      // 添加前判断  如果以前存在该商品，数量+1   不存在  push该商品
      // state.cart
      // value
      // find:返回值是找到满足条件的那一个项,找不到返回undefined
      const findItem = state.cart.find(item => item.goods_id === value.goods_id)
      if (findItem) {
        findItem.goods_count++
      } else {
        state.cart.push(value)
      }
    },
    setStatus(state, value) {
      // value:商品的id值goods_id
      const findItem = state.cart.find(item => item.goods_id === value)
      if (findItem) {
        findItem.goods_status = !findItem.goods_status
      }

    },
    setCount(state, value) {
      // value={goods_id,goods_count}
      // 找出相应的商品
      const findItem = state.cart.find(item => item.goods_id === value.goods_id)
      if (findItem) {
        findItem.goods_count = value.goods_count
      }
    },
    // 删除
    delGoods(state, value) {
      //  [{goods_id:1},{goods_id:2},{goods_id:3}]  ===>[{goods_id:2},{goods_id:3}]
      state.cart = state.cart.filter(item => item.goods_id !== value)
    },
    // 修改选中状态
    setAllStatus(state, value) {
      state.cart.forEach(item => {
        item.goods_status = value
      })
    },
    reSetCart(state) {
      state.cart = state.cart.filter(item => {
        return !item.goods_status
      })
    }
  },
  actions: {},
  getters: {
    total(state) {
      return state.cart.reduce((prev, item) => {
        if (item.goods_status) {
          return prev + item.goods_count
        } else {
          return prev
        }
      }, 0)
    },
    // 全选:所有商品都是勾选状态
    isAll(state) {
      // state.cart     goods_status
      // every:每一项都满足条件  some：只需要一个项满足条件
      return state.cart.every((item) => item.goods_status)
    },
    // 合计:所有已勾选商品的价格总合
    totalPrice(state) {
      return state.cart.reduce((prev, item) => {
        if (item.goods_status) {
          return prev + item.goods_price * item.goods_count
        } else {
          return prev
        }
      }, 0)
    }
  }
}